Android Customized Layout
Android
Kotlin
Layout
Customized
First Step
Write the .xml file, implement your design
For the example we use RelativeLayout and call file the test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="64dp"
android:paddingTop="20dp"
android:paddingBottom="20dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:gravity="start"
android:text="@string/empty"/>
</RelativeLayout>
## Second Step ### Write the .kt file, for example call the `TestLayout.kt` ```kotlin
class TestLayout(context: Context, attrs: AttributeSet)
: RelativeLayout(context, attrs) {
init {
inflate(context, R.layout.test, this)
}
}
<br>
### Now, you can use this layout in the other xml file
```kotlin
<your_package_name.TestLayout
android:id="@+id/recentActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</your_package_name.TestLayout>
### Looking Good ### But can not set title with TestLayout container TextView in other xml file # π«π«π«π«π«π«
## Third Step
Create attrs.xml
in the res/values
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TestLayout">
<attr name="title" format="string" />
</declare-styleable>
</resources>
Change TestLayout.kt
class TestLayout(context: Context, attrs: AttributeSet)
: RelativeLayout(context, attrs) {
init {
inflate(context, R.layout.test, this)
// add next three lines
val attributes = context.obtainStyledAttributes(attrs, R.styleable.TestLayout)
textView.text = attributes.getString(R.styleable.TestLayout_title)
attributes.recycle()
}
}
Now, you can set textView title in other xml file, Like this
<your_package_name.TestLayout
android:id="@+id/recentActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/good_job">
</your_package_name.TestLayout>
## Finish Done, No No No
### When use more more Customized Layout ### Setup more more the attr in the `attrs.xml` ### You will find, like can not setup the same name attr in the `attrs.xml` # π±π±π±π±π±π± ### It's fine, this is simple fix ### You can change your `attr.xml` like this ```kotlin
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="title" format="string" />
<declare-styleable name="TestLayout">
<attr name="title"/>
</declare-styleable>
</resources>
## <a href="https://stackoverflow.com/a/4464966" target="_blank">Reference Link</a>